본문으로 건너뛰기

동기화

프로세스 동기화(Process Synchronization)란 프로세스들 사이의 수행 시기를 맞추는 것을 의미한다.

  • 실행 순서 제어: 프로세스 올바른 순서대로 실행하기
  • 상호 배제: 동시에 접근해서는 안되는 자원에 하나의 프로세스만 접근하게 하기

실행 순서 제어

Writer라는 프로세스와 Reader라는 프로세스가 동시에 실행중이라고 하자.

Writer 프로세스는 데이터를 쓰고, Reader 프로세스는 데이터를 읽는다. 이 두 프로세스는 아무 순서대로 실행되어서는 안된다. Reader 프로세스는 Writer 프로세스 실행이 끝나야 비로서 실행할 수 있기 때문이다.

이렇게 동시에 실행되는 프로세스를 올바른 순서대로 실행하는 것이 프로세스 동기화이다.

상호 배제

생산자와 소비자 문제가 있다.

생산자와 소비자는 '총합'이라는 데이터를 동시에 사용하는데, 생산자는 소비자의 끝나기 전에 총합을 수정하고 소비자는 생산자의 작업이 끝나기전에 총합을 수정해서 발생한다.

결국 생산자 소비자 문제는 동시에 접근해서는 안되는 자원에 동시에 접근하기 때문에 발생한 문제이다.

임계 구역

여러 프로세스가 서로 협력해 공유자원을 사용하는 상황에서 경쟁 조건(race condition)이 발생하면 공유자원의 신뢰성이 떨어진다.

임계 구역(Critical Section)은 코드 상에서 race condition이 발생할 수 있는 특정 부분을 말한다. 임계 구역 문제를 해결하기 위해서는 몇 가지 조건을 충족해야 한다.

  • 상호 배제(Mutual Exclusion): 이미 한 프로세스가 임계영역에서 작업중일 때 다른 프로세스는 임계영역에 진입할 수 없다.
  • 진행(Progress): 임계 영역에서 작업중인 프로세스가 없다면 다른 프로세스가 critical section에 진입할 수 있어야 한다.
  • 한정 대기(Bounded Waiting): 임계영역에 진입하려는 프로세스가 무한하게 대기해서는 안된다.

Non-Preemptive Kernels로 구현하면 임계 영역 문제가 발생하지 않는다. 하지만 비선점 스케줄링은 반응성이 떨어지기 때문에 슈퍼컴퓨터가 아니고선 잘 사용하지 않는다.

Reference